﻿namespace MetaProperties.Framework
{
    using System.ComponentModel;

    /// <summary>
    /// Defines an observable value.
    /// </summary>
    public interface IObservable : INotifyPropertyChanged, INotifyPropertyChanging
    {
        /// <summary>
        /// Occurs when a property value changes.
        /// </summary>
        event ValueChangedEventHandler UntypedValueChanged;

        /// <summary>
        /// Occurs when a property value is set.
        /// </summary>
        event ValueChangedEventHandler UntypedValueSet;

        /// <summary>
        /// Gets the untyped value.
        /// </summary>
        /// <value>The untyped value.</value>
        object UntypedValue { get; }
    }
}
